查看原文
其他

Jitter 教程翻译02 - Jitter 对象的属性

kidult00 科技无障碍 2022-11-03

Jitter 教程翻译01 - 什么是矩阵?

00 翻译自 Cycling74 的 Max/MSP/Jitter 官方文档:Attributes: Editing Jitter object parameters

https://docs.cycling74.com/max7/tutorials/jitterchapter00b_whatareattributes

属性是指定 Max 对象行为的方法。大多数 Jitter 对象使用属性来指定当前状态的变量。


Max 计数器对象

许多 Max 对象使用多个参数来确定行为。对象名称后面的这些参数的顺序,决定了对象如何解析它们。在上面的例子中,counter 的第一个参数设置了计数的方向;第二个和第三个参数确定最小值和最大值。

这些值都是数字,参数个数可能会影响对象的行为,所以它们的顺序很重要。如果 counter 只有两个参数,它们会作为最小和最大值,而不是方向和最小值。参数的位置和数量最为关键,在 counter 的例子中,如果只有两个参数,就没办法创建能够指定方向和最大值的 counter 对象。

给定的对象参数,通常被视为初始值,可以从其他入口或发送特殊消息给对象来修改这些值。例如,分别发送整数到第 2 个和第 5 个入口,来更改 counter 对象的方向和最大值,它们会替代默认值。同样,你可以向左入口发送消息 min 后跟一个整数,来更改对象的最小值。

当 Max 对象只有两、三个参数时,天下太平。但是 Jitter 对象通常有很多很多变量(甚至几十个)。如果所有变量都依赖于入口和对象参数的顺序,那么光看文档就够你忙的……

设置属性

与 Max 对象不同,Jitter 对象可以用属性来设定行为。将属性与 Jitter 对象的名称一起输入对象框,或者在创建对象后用消息设置(和检索)属性:


具有对象名称后的属性的Jitter对象

上面是 jit.brcosa 的例子,它有三个属性。使用 @ 符号 + 属性名称 + 一个或多个参数(可以是任意数据类型:int,float,symbol 或 list),在对象框中设置属性。

可以在对象的名称之后,以任意顺序输入个数不限的属性。你可能不知道 jit.brcosa 对象的功能,但可以根据属性的名称以及数据类型来推断。

提示:@符号与属性名称之间没有空格

同样重要的是:Jitter 对象可以同时具有输入的属性和输入的参数。请参阅下面的 Jitter 对象参数 部分。

与 Max 对象一样,创建 Jitter 对象并设置初始值以后,可以向对象发送消息随时更改这些属性值:


使用 Max 消息更改属性

jit.brcosa 对象的亮度属性初始值为 0.5(在对象框中输入 @brightness 0.5),然后可以发送消息 brightness [float]到对象的左入口来更改。发送带有属性名称的消息(后跟相关参数)到 Jitter 对象的左入口,就可以更改几乎任何属性。

与 Max 对象一样,Jitter 对象有参数的默认值。上面的 jit.brcosa 对象只设置了亮度的初始值,其他属性都使用默认值。在上面的示例中,使用消息更改对象的对比度(contrast)和饱和度(saturation)属性的值,从而替换对象的默认值。

下面说明如何设置对象的属性值。

Jitter 对象参数

大多数 Jitter 对象有四种输入属性输入参数。实际上它们都是属性,只不过 Jitter 对象会自动判断应该用作属性还是参数。


Jitter 对象也可以有参数

上面 jit.rota 对象有两个初始化的属性:anchor_xanchor_y。但其他数字是什么意思呢?

如果 Jitter 对象处理的是矩阵数据,则参数将被理解为:

  1. 输出矩阵的 planecount

  2. 输出矩阵的类型

  3. 输出矩阵的大小或维度


现在我们知道,上面的 jit.rota 对象将输出一个由 4 个 char(8位整数)数据平面组成的矩阵,每个平面的维度是 320x240。

注意:如果要指定 Jitter 对象的参数,参数必须出现在任意属性之前。否则 Jitter 对象会将参数误解为属性的值,而不是对象的参数。

所有可以输出矩阵数据的 Jitter 对象,都有几个共同的属性,它们可以设置参数:planecount,type 和 dim。可以通过输入属性(不需要指定顺序),也可以用消息触发更改。例如,下面的三个对象是等价的:


参数或属性?你来定

  • 第一个对象的输出矩阵,直接使用输入的参数来设置。

  • 第二个对象使用输入的参数设置了 planecounttype,但使用了输入的属性设置了 dim 的数量。

  • 第三个对象使用输入的属性来设置所有内容。


你也可以用 loadbang 对象触发的消息来初始化对象属性:


另一种初始化属性的方法

查询属性和对象状态

查找对象属性设置的最快方法,是查看检查器(inspector)。选中对象,按 cmd/alt + i 或单击右侧工具栏上的 i 图标就可以打开。在窗口底部附近可以找到当前属性设置。

属性的另一个功能是显示 Jitter 对象属性的当前值。用一个 get 开头的消息,紧跟想要查询的属性名(与get之间没有空格)来触发。比如下图的 getdim 可以触发动作,获取 jit.grab 对象的 dim 当前参数。结果值由 Jitter 对象以消息形式从右输出口输出(以属性的名称 dim 开头)。


查询 Jitter 对象的属性

使用 get 可以查询出属性的当前值,即使之前从未设置过。例如,下面的 patch 获取了 jit.plur 对象的一些默认值。用 route 对象可以轻松分离每个属性的值。


获取属性的默认值

你可以发送给任何 Jitter 对象getattributesgetstate 消息,来获得对象的所有属性。

       

getAttributes 消息令 Jitter 对象输出它包含的所有属性列表。查看几个 Jitter 对象,很快就会发现几个频繁出现的属性(例如outputmode,type 和 dim)。其他(例如 jit.brass 对象中的 mask)则是某些对象独有的。

getstate 消息可以一次性输出 Jitter 对象所有属性的值:


查询对象的状态

这样我们就可以用 routeunpack和其他对象来按需查找属性值了。在后续的教程中会遇到几个 Jitter 对象,其属性基于输入矩阵(或被对象打开的文件)执行的计算而更改。想要找出对象计算结果,就需要查询相关属性值。

ATTR

你还可以使用 attrui 对象读取属性值。这是一个 UI 控件,它与对象的入口是双向连接的。attrui 对象有两个部分,左边部分是所有可用的属性的下拉菜单。选择属性后,右侧会显示属性的当前值,并可编辑。


查找对象的状态

小结

Jitter 对象的属性,让我们可以很好地管理复杂的对象参数。你可以使用属性来初始化、更改和查找存储在 Jitter 对象中的当前值。直接在属性名称后赋值,就免去了记忆参数功能和顺序的麻烦。


更多 Max/MSP 应用,请翻阅 MakeNoise 系列

MakeNoise01 - 声音是什么?
MakeNoise02 - 频率和音高
MakeNoise03 - 振幅/响度/音量/增益 大乱斗
MakeNoise04 - 波形和相位
MakeNoise05 - Envelope 包络(ADSR)
MakeNoise06 - 音色和均衡器(EQ)
MakeNoise07 - 音频的「分辨率」
MakeNoise08 - 振荡器和滤波器
MakeNoise09 - 压缩 Compression
MakeNoise10 - 延时和混响


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存